查看原文
其他

Google Play Billing 系列分享: 订阅取消后的那些事儿——恢复订阅和重新订阅

Google Play 谷歌开发者 2021-08-05

作者/高寒蕊,Google 开发技术推广工程师


Google Play Billing 系列内容是专门为中文开发者开辟的系列分享,着重讲解中国开发者对 Play Billing 最容易感到疑惑的地方。如果您有任何问题,也欢迎在留言区提出,我们会收集大家的反馈并在后续文章中做出解答。

相信作为订阅应用的开发者,您已经阅读过我们上个月发布的文章《订阅新功能上线,助您轻松提高用户留存》,也清楚的了解订阅业务模式对于应用和游戏的盈利有多重要,这篇文章,我们想跟各位已经实现了订阅或者正在计划要为应用接入 Play 订阅服务的开发者们聊聊当用户取消订阅后的那些事,再具体点,就是 "恢复订阅" 和 "重新订阅",这两者到底有什么区别,在处理的时候有哪些需要注意的地方。

在处理很多开发者的咨询时,我发现一个有趣的现象,中文的开发者对于 Play 订阅所提供的 Restore 和 Resubscribe 功能经常觉得混淆,不知道这俩单词到底是指一个事情还是不同的功能,而搜索 Stack Overflow 也没有看到任何相关的提问。

在我们的官方文档里,有这样一段描述:

  • 官方文档: 销售订阅内容 > 重新订阅
    https://developer.android.google.cn/google/play/billing/subs#resubscribe


于是有些开发者就会认为恢复订阅是重新订阅的一种,两者本质是一样的,其实这个理解 (或者说是原文的描述) 是不准确的。恢复订阅 (Restore) 的重点是恢复,它有几个关键条件: 1) 用户取消的订阅;2) 虽然取消了,但订阅并未过期;3) 只能在 Play 订阅中心里去操作。这三要素缺一不可。由于是恢复,所以它实际上还是原来的订阅,purchaseToken 不会变。

而重新订阅 (Resubscribe,有时也叫做 Resignup),本质上是一次新的订阅购买,之前这个重新订阅的行为只能从应用内发起,今年 6 月随着订阅平台的一系列改进,对已经过期不满一年的订阅,用户也可以从 Play 订阅中心去完成这个操作。而过期超过 1 年后,用户只能从您的应用中重新购买相同的订阅内容。不管重新订阅的操作是从应用内完成的还是从新版的 Play 订阅中心完成的,是订阅过期前做的还是订阅过期后的一段时间内做的,它的本质是不会变的,所以产生的结果就是会产生新的 purchaseToken。

下面的表格可以帮助开发者更直观的看出两者之间的差别:

这里特别提醒开发者注意的一种情形是当取消的订阅尚未到期,而用户又再次购买的场景。根据下面链接中的官方文档,新订阅将替换旧订阅,并在同一到期日期续订。而我们上面也提到了,重新订阅会产生一个新的 purchaseToken,而之前的旧订阅也仍会有 purchaseToken,所以开发者需要注意及时将旧订阅的 purchaseToken 标注为失效,否则就可能出现同一用户对同一订阅产品 (即同一 SKU) 有两个 purchaseToken 同时有效的情况。那怎么知道旧订阅的 purchaseToken 呢?如果在重新订阅发生时,旧的订阅尚未失效,您会在新的订阅里看到于 linkedPurchaseToken 这个字段,记录了与之关联的旧的订阅的 purchaseToken。

  • 官方文档: 销售订阅内容 > 订阅到期之前
    https://developer.android.google.cn/google/play/billing/subs#resubscribe-before


对于 linkedPurchaseToken 的处理方法,可以参考下面这篇文章:

  • 《正确实现 linkedPurchaseToken,避免重复订阅》 (作者: Emilie Roberts)

    https://medium.com/androiddevelopers/implementing-linkedpurchasetoken-correctly-to-prevent-duplicate-subscriptions-82dfbf7167da#eb81


从上面的表格里,大家也不难看出来,这两种操作都是可以从 Play 订阅中心去完成的,换句话说,这个行为是在您的应用外完成的,开发者除了正常的响应 RTDN 之外,还需要注意对于重新购买,一定要及时确认购买交易,尤其是使用了 Play Billing Library 2.0 或以上版本的开发者,任何的交易如果没有在三天之内得到确认,就会被 Play 取消。

最后还想提醒大家一点的是,虽然我们上面提到如果重新订阅发生时,老的订阅尚未失效,您会在新的订阅里看到 linkedPurchaseToken 这个字段,但请不要依赖于这个字段是否存在来判断老的订阅是否还在有效期内,对于所有订阅的 purchaseToken,开发者都应该通过 Google Developer API 的订阅接口里返回的 expiryTimeMillis 字段信息作为正确的订阅到期时间。您还可以阅读官方文档了解关于销售订阅和实时开发者通知参考指南。

  • Google Developer API的订阅接口
    https://developers.google.google.cn/android-publisher/api-ref/rest/v3/purchases.subscriptions/get
  • 销售订阅
    https://developer.android.google.cn/google/play/billing/subs
  • 实时开发者通知参考指南
    https://developer.android.google.cn/google/play/billing/rtdn-reference


对于恢复订阅和重新订阅,您分清楚了么?如果您关于订阅还有任何疑问,欢迎在评论区给我们留言提出您的问题。



推荐阅读






 点击屏末 | 阅读原文 | 即刻通过 Google Play 开启成功出海之旅



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存